const fs = require("fs");

const momentService = require("../service/moment.service");
const fileService = require("../service/file.service");
const { PICTURE_PATH } = require("../constants/file-path");

class MomentController {
	// 发布内容
	async create(ctx, next) {
		// 获取动态信息（user_id, content）
		const userId = ctx.user.id;
		const content = ctx.request.body.content;

		// 插入数据库
		const result = await momentService.create(userId, content);
		// 返回数据
		ctx.body = {
			code: 200,
			message: "发布成功",
			data: result
		};
	}

	// 获取内容列表
	async list(ctx, next) {
		// 获取数据(offset/size)
		const { offset, size } = ctx.query;
		const result = await momentService.getMomentList(offset, size);
		ctx.body = result;
	}

	// 获取内容详情
	async detail(ctx, next) {
		// 获取内容ID （momentId）
		const momentId = ctx.params.momentId;
		// 根据id查询
		const result = await momentService.getMomentById(momentId);
		// 返回数据
		ctx.body = result;
	}

	// 修改内容
	async update(ctx, next) {
		// 获取相关信息 (id,content)
		const { momentId } = ctx.params;
		const { content } = ctx.request.body;

		// 修改数据
		const result = await momentService.update(content, momentId);
		// 返回数据
		ctx.body = {
			code: 200,
			message: "修改成功",
			data: result
		};
	}

	// 删除内容
	async remove(ctx, next) {
		const { momentId } = ctx.params;
		const result = await momentService.remove(momentId);
		// 返回数据
		ctx.body = {
			code: 200,
			message: "删除成功",
			data: result
		};
	}

	// 给动态添加标签
	async addLabels(ctx, next) {
		// 获取标签和动态id
		const { labels } = ctx;
		const { momentId } = ctx.params;

		// 添加标签
		for (let label of labels) {
			// 判断标签是否已添加
			const isExists = await momentService.hasLabel(momentId, label.id);
			if (!isExists) {
				// 没有添加才添加
				await momentService.addLabel(momentId, label.id);
			}
		}
		// 返回数据
		ctx.body = {
			code: 200,
			message: "添加标签成功"
		};
	}

	// 获取内容配图
	async getPictureInfo(ctx, next) {
		// 获取配图名字和尺寸
		const { filename } = ctx.params;
		const { size } = ctx.query;
		const sizes = ["large", "middle", "small"];
		// 查找配图
		const pictureInfo = await fileService.getPictureInfo(filename);

		// 下载配图
		// ctx.body = fs.createReadStream(`${PICTURE_PATH}/${pictureInfo.filename}`);

		// 返回配图
		ctx.response.set("content-type", pictureInfo.mimetype);
		if (sizes.some((item) => item === size)) {
			const arr = filename.split(".");
			arr[0] = arr[0] + `-${size}`;
			if (arr[1] === "jpg") arr[1] = "jpeg";
			const newName = arr.join(".");
			ctx.body = fs.createReadStream(`${PICTURE_PATH}/${newName}`);
		} else {
			ctx.body = fs.createReadStream(`${PICTURE_PATH}/${filename}`);
		}
	}
}

module.exports = new MomentController();
